<?php

namespace App\Util;

class IdCardUtil
{
    const GENDER_MALE = 1;
    const GENDER_FEMALE = 2;

    /**
     * 从身份证号提取性别
     * @param $idCardNo
     *
     * @author Chris Yu <chrisyu@crabapple.top> 2024/4/11
     */
    public static function extractGenderByIdCardNo($idCardNo)
    {
        // 获取身份证号码倒数第二位数字
        $genderDigit = intval(substr($idCardNo, -2, 1));

        // 奇数表示男性，偶数表示女性
        if ($genderDigit % 2 === 0) {
            return self::GENDER_FEMALE;
        }
        else {
            return self::GENDER_MALE;
        }
    }

    /**
     * 从身份证号提取信息
     * @param $idCardNo
     *
     * @return array
     * @author Chris Yu <chrisyu@crabapple.top> 2024/4/11
     */
    public static function extractInfoByIdCardNo($idCardNo)
    {
        $info = array();

        // 地区码
        $info['region'] = substr($idCardNo, 0, 6);
        // 出生日期码
        $info['birthday'] = substr($idCardNo, 6, 8);
        // 顺序码
        $info['sequence'] = substr($idCardNo, 14, 3);
        // 校验码
        $info['checksum'] = substr($idCardNo, -1);
        // 性别
        $info['gender'] = self::extractGenderByIdCardNo($idCardNo);

        return $info;
    }
}
